package ScalaStudy.chapter07

import scala.collection.mutable

object Test16_MergeMap {

  def main(args: Array[String]): Unit = {


    //////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////  聚合练习  /////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////


    val map1 = Map("a" -> 1, "b" -> 3, "c" -> 6)
    val map2 = mutable.Map("a" -> 6, "b" -> 2, "c" -> 9, "d" -> 3)
    //   需要       "a"->1+6, ........

//    println(map1 ++ map2)            //这种map2把map1的键都覆盖了，结果不对

    val map3 = map1.foldLeft(map2)(             //把map1都合并到map2里面去，map2为初值
      (mergedMap, kv) => {                      //mergedMap表示map2中不断更新的聚合状态，kv表示新的聚合原素，这里是map1中的所有元素
        val key = kv._1                         //kv._1为map1中的键
        val value = kv._2                       //kv._1为map1中的值
        mergedMap(key) = mergedMap.getOrElse(key,0) + value    //获取map1中的键对应的值，如果存在则加上value，不存在则返回map1的value
        mergedMap                               //返回map2中最终的聚合态
      }
    )

    println(map3)


  }
}
